Текстурный блок

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

В компьютерной графике блок текстурирования (TMU) — компонент современных графических процессоров (GPU). Они способны поворачивать, изменять размер и деформировать  (англ.) растровое изображение  (англ.), чтобы поместить его на произвольную плоскость заданной 3D-модели в качестве текстуры, в процессе, называемом текстурированием. В современных видеокартах он реализован как дискретный этап в графическом конвейере  (англ.),[1] в то время как при первом появлении он был реализован как отдельный процессор, например, как в видеокарте Voodoo2.

История и предпосылки[править | править код]

TMU появился из-за необходимости вычислений, связанных с дискретизацией и преобразованием плоского изображения (как текстурной карты) в правильный угол и перспективу в 3D-пространстве. Вычислительная операция представляет собой большое матричное умножение, с которым процессоры того времени (ранние Pentiums) не могли справиться с приемлемой производительностью.

В 2013 году TMU являются частью шейдерного конвейера и отделены от выходных конвейеров рендеринга  (англ.) (ROPs). Например, в GPU Cypress от AMD каждый шейдерный конвейер (а их 20) имеет четыре TMU, что даёт GPU 80 TMU. Это сделано разработчиками чипов, чтобы тесно связать шейдеры и текстурные движки, с которыми они будут работать.

Геометрия[править | править код]

3D-сцены  (англ.) обычно состоят из двух частей: 3D-геометрии и текстур, покрывающих эту геометрию. Текстурные блоки в видеокарте берут текстуру и «накладывают» её на геометрию. То есть они оборачивают текстуру вокруг геометрии и создают текстурированные пиксели, которые затем могут быть записаны на экран. Текстуры могут быть реальными изображениями, картами освещения или даже картами нормалей для расширенных эффектов освещения поверхности.

Коэффициент заполнения текстуры[править | править код]

Для рендеринга 3D-сцены текстуры накладываются поверх полигональных сеток. Это называется текстурированием и выполняется блоками текстурирования (TMU) на видеокарте. Скорость заполнения текстур — это показатель скорости, с которой конкретная видеокарта может выполнять текстурирование.

Хоть обработка пиксельных шейдеров становится все более важной, этот показатель все ещё имеет определённый вес. Лучший пример тому — X1600 XT. У этой карты соотношение процессоров пиксельных шейдеров и блоков текстурирования составляет 3 к 1. В результате X1600 XT достигает более низкой производительности по сравнению с другими GPU той же эпохи и класса (например, nVidia 7600GT). В среднем диапазоне текстурирование все ещё может быть узким местом. Однако на высоких настройках X1900 XTX имеет то же соотношение 3 к 1, но справляется с задачей просто отлично, поскольку разрешение экрана достигает максимума, а мощности текстурирования более чем достаточно для работы с любым дисплеем.

Подробности[править | править код]

Блоки текстурирования (TMU)[править | править код]

Текстуры нуждаются в адресации и фильтрации. Эту работу выполняют TMU, которые работают в связке с блоками пиксельных и вершинных шейдеров  (англ.). Задача TMU — применять текстурные операции к пикселям. Количество текстурных блоков в графическом процессоре используется при сравнении двух разных карт по производительности текстурирования. Логично предположить, что карта с большим количеством TMU будет быстрее обрабатывать информацию о текстуре. В современных графических процессорах TMU содержат блоки адресации текстур (TA) и блоки фильтрации текстур (TF). Блоки адресации текстур сопоставляют тексели с пикселями и могут выполнять режимы адресации текстур. Блоки фильтрации текстур опционально выполняют аппаратную фильтрацию текстур  (англ.).

Конвейеры[править | править код]

Конвейер — это архитектура видеокарты, которая даёт общее точное представление о вычислительной мощности графического процессора.

Конвейер не является официально принятым техническим термином. В графическом процессоре существуют различные конвейеры, поскольку в каждый момент времени выполняются разные функции. Исторически сложилось так, что конвейером называют пиксельный процессор, подключённый к выделенному TMU. Geforce 3 имел четыре пиксельных конвейера, каждый из которых имел два TMU. Остальная часть конвейера выполняла такие операции, как глубина и смешивание.

ATI Radeon 9700 был первым, кто сломал эту форму, разместив несколько вершинных шейдеров независимо от пиксельных шейдеров. Графический процессор R300, используемый в Radeon 9700, имел четыре глобальных вершинных шейдера, но разделял остальную часть конвейера рендеринга пополам (он был, так сказать, двухъядерным) каждая половина, называемая квадом, имела четыре пиксельных шейдера, четыре TMU и четыре ROP.

Некоторые блоки используются чаще, чем другие, и в попытке увеличить производительность процессора, они попытались найти «золотую середину» в количестве блоков, необходимых для оптимальной эффективности без избыточного использования кремния. В этой архитектуре название «пиксельный конвейер» потеряло свой смысл, поскольку пиксельные процессоры больше не были привязаны к отдельным TMU.

Вершинный шейдер уже давно был отсоединён, начиная с R300, а вот с пиксельным шейдером все было не так просто, поскольку для работы с ним требовались цветовые данные (например, образцы текстур), а значит, он должен был быть тесно связан с TMU.

Такая связь сохранилась и по сей день: шейдерный движок, состоящий из блоков, способных работать с вершинными или пиксельными данными, тесно связан с TMU, но имеет кроссбарный диспетчер между своим выходом и банком ROP.

Выходные конвейеры рендеринга (ROPs)[править | править код]

Выходной конвейер рендеринга — это унаследованный термин, который чаще называют блоком вывода рендера  (англ.). Его задача — контролировать выборку пикселей (каждый пиксель ‑ это безразмерная точка), поэтому он управляет сглаживанием, когда в один пиксель объединяется более одного образца. Все отрисованные данные должны пройти через ROP, чтобы быть записанными в кадровый буфер, откуда они могут быть переданы на дисплей.

Таким образом, ROP — это место, где выходные данные GPU собираются в растровое изображение, готовое к отображению.

Использование в GPGPU[править | править код]

В GPGPU текстурные карты в одномерных, двумерных или трёхмерных измерениях могут использоваться для хранения произвольных данных. Обеспечивая интерполяцию, блок текстурирования предоставляет удобные средства для аппроксимации произвольных функций таблицами данных.

Ссылки[править | править код]

Примечания[править | править код]

  1. Dev Hardware - The Graphics Pipeline. Дата обращения: 11 мая 2006. Архивировано из оригинала 28 мая 2006 года.